#include<stdio.h>
#include<windows.h>

void Swap(int *a,int *b)
{
	int t;
	t=*a;
	*a=*b;
	*b=t;
}

void FullPermutation(int a[], int begin, int end)  
{  
    int i,j,s=0,t=0,m=0,n=0,flag=0;    
    if (begin>end) // 找到一个排列  
    {  
        for (j=1;j<=3;j++)
        {
            for (i=1;i<=3;i++)
        	{
        		s+=a[3*(j-1)+i];
        		t+=a[3*(i-1)+j];
        	}
        	if (s%15==0)
        		flag++;
        	if (t%15==0)
        		flag++;
        	m+=a[4*j-3];
        	n+=a[2*j+1];
        }
        if (m==15&&n==15&&flag==6)
			for (i=1;i<=end;i++)  
        	{  
           		if (i==9)	
           		{
           			printf("%d\n\n",a[i]);
           			break;
           		}
				if (i%3!=0) 
		   			printf("%d  ",a[i]); 
		   		else 
		   			printf("%d\n",a[i]);
        	}    
    }  
    else// 没有找完一个排列，则继续往下找下一个元素  
    {  
        for (i=begin;i<=end;i++)  
        {  
            if (begin!=i)    
                Swap(&a[begin],&a[i]);  
            // 递归排列剩余的从begin+1到end的元素  
            FullPermutation(a,begin+1,end);  
            if (begin!=i)   
                Swap(&a[begin],&a[i]);     
        }  
    }  
}

int main()
{
	int i,a[10];
	for (i=1;i<=9;i++)
		a[i]=i;
	FullPermutation(a,1,9);
	system("pause");
	return 0;
}